package main

import (
	"encoding/json"
	"fmt"
	"langtu.com/common/lang"
	"log"
	"log/slog"
	"os/exec"
	"strings"
)

const UserCode string = "1"

type UserVO struct {
	Username      string `json:"username"`
	Password      string `json:"password"`
	UserStateCode int    `json:"userStateCode"`
	UserStateText string `json:"userStateText"`
}

func main() {
	password := lang.NewPassword("测试")
	fmt.Printf("PasswordValue: %s  , PasswordMd5Value : %s \n", password.PasswordValue, password.PasswordMd5Value)
	//for i := 0; i < 10; i++ {
	//	snowflakeId, _ := id.NewMyId().NextSnowflakeId(int64(1))
	//	slog.Info(" ", "snowflakeIdValue ", snowflakeId)
	//}

	value := "哈哈哈aa123123"
	for _, c := range value {
		fmt.Println(string(c))
	}

	//	json格式化
	byteValue, _ := json.Marshal(UserVO{
		Username:      "s",
		Password:      "s123",
		UserStateCode: 1,
		UserStateText: "Active",
	})
	fmt.Println(string(byteValue))
	tempUserVO := &UserVO{}
	err := json.Unmarshal(byteValue, tempUserVO)
	if err != nil {
		fmt.Printf(err.Error())
		return
	}
	fmt.Println(" ==== tempUserVO ====")
	fmt.Println(tempUserVO)
	fmt.Println(" ==== Finish tempUserVO ====")
	//	cmd测试
	cmd := exec.Command("C:\\Java\\jdk-1.8\\bin\\java.exe", "--version")
	var out strings.Builder
	cmd.Stdout = &out
	err = cmd.Run()
	if err != nil {
		log.Fatal(err)
		slog.Error("My Error : " + err.Error())
	}
	fmt.Printf("in all caps: %q\n", out.String())
	//myChannel := make(chan int)

	//fmt.Println("开始")
	//for i := 0; i < 10; i++ {
	//	go func(ch chan int) {
	//		myChannel <- rand.Int()
	//	}(myChannel)
	//}
	//
	//for v := range myChannel {
	//	fmt.Println("通道输出：", v)
	//}
	//
	//fmt.Println("结束")
	//time.Sleep(time.Second)

	//	fmt.Printf("Hello Collector Server %s \n", "soltex")
	//	a, b, _, _ := collectorserver.UserProperties("soltex")
	//	fmt.Printf("User Properties:%s || %s \n", a, b)
	//
	//	v1 := complex(12, 2)
	//	v2 := complex(23, 12)
	//
	//	result := collectorserver.CalComplexResult(v1, v2)
	//	fmt.Printf("Result:%s \n", result)
	//
	//	strValue := `
	//定义多⾏字符串的⽅法如下
	//定义多⾏字符串的⽅法如下
	//定义多⾏字符串的⽅法如下
	//定义多⾏字符串的⽅法如下
	//定义多⾏字符串的⽅法如下
	//定义多⾏字符串的⽅法如下
	//	`
	//	fmt.Println(strValue)
	//	fmt.Println(UserCode)
	//
	//	v := 0b1001001
	//	fmt.Println(v)
	//	vx := 0xfffffff
	//	fmt.Println(vx)
	//
	//	values := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	//	collectorserver.UserProperties1(123, values)
	//
	//	grade, score := collectorserver.CalGrade(123.123)
	//	fmt.Printf("Grade:%s  %f \n ", grade, score)
	//
	//	collectorserver.CalResult1(1, 2, 3)
	//
	//	m := []int{1, 2, 3, 3, 4, 5, 65, 56, 4, 3, 234, 534, 534}
	//
	//	for i, value := range m {
	//		fmt.Println(i, value, len(m))
	//		values := append(m, value, value)
	//		fmt.Println(values)
	//	}
	//
	//	fmt.Println(reflect.TypeOf(m))
	//
	//	vvv := func(i float32) float32 {
	//		fmt.Println(i)
	//		return i * i
	//	}(10.012)
	//
	//	fmt.Println("匿名函数：", vvv)
	//
	//	cal := func(f1 float32, f2 float32) float32 {
	//		return f1 / f2
	//	}
	//	fmt.Println(cal(12, 2))
	//
	//	//	CalResult4 匿名函数
	//	result4 := collectorserver.CalResult4(12, 2.34, func(result float32) float32 {
	//		return result * result
	//	})
	//	fmt.Printf("Result4 value : %f", result4)
	//
	//	//	添加
	//	fmt.Printf("操作-添加 : %f \n", collectorserver.Ops(12.23, 343434.3434, collectorserver.Calculator4Add{}))
	//	fmt.Printf("操作-减法 : %f \n", collectorserver.Ops(12.23, 343434.3434, collectorserver.Calculator4Subtract{}))
	//	fmt.Printf("操作-乘法 : %f \n", collectorserver.Ops(12.23, 343434.3434, collectorserver.Calculator4Multi{}))
	//	fmt.Printf("操作-除法 : %f \n", collectorserver.Ops(12.23, 343434.3434, collectorserver.Calculator4Div{}))
	//
	//	//	计算评分
	//	fmt.Println(collectorserver.CalScore(1, 2, 3, 3, 4, 3, 3, 123, 23, 42345, 12, 23234))
	//
	//	fmt.Printf("递归结果 ：%d \n", collectorserver.MuliByN(5))
	//
	//	temp := 10
	//	fmt.Printf("测试一下结果：%s , %s \n", temp, &temp)
	//
	//	x := 123
	//	collectorserver.ChangeValue(&x, 123123)
	//	fmt.Printf("1. 更换值为新的值 :  %d \n", x)
	//
	//	collectorserver.ChangeValue2(x, 666666)
	//	fmt.Printf("2. 更换值为新的值 :  %d \n", x)
	//
	//	password := NewPassword("测试一下")
	//	fmt.Println(password.PasswordValue, password.PasswordMd5Value)
}
